@@ -104,6 +104,12 @@ ALLOW_JSONPATH_EVAL=false |
||
104 | 104 |
# when you trust everyone using your Huginn installation. |
105 | 105 |
ENABLE_INSECURE_AGENTS=false |
106 | 106 |
|
107 |
+# Enable this setting to allow second precision schedule in |
|
108 |
+# SchedulerAgent. By default, the use of the "second" field is |
|
109 |
+# restricted so that any value other than a single zero (which means |
|
110 |
+# "on the minute") is disallowed. |
|
111 |
+ENABLE_SECOND_PRECISION_SCHEDULE=false |
|
112 |
+ |
|
107 | 113 |
# Use Graphviz for generating diagrams instead of using Google Chart |
108 | 114 |
# Tools. Specify a dot(1) command path built with SVG support |
109 | 115 |
# enabled. |
@@ -8,7 +8,11 @@ module Agents |
||
8 | 8 |
cannot_receive_events! |
9 | 9 |
cannot_create_events! |
10 | 10 |
|
11 |
- description <<-MD |
|
11 |
+ @@second_precision_enabled = ENV['ENABLE_SECOND_PRECISION_SCHEDULE'] == 'true' |
|
12 |
+ |
|
13 |
+ cattr_reader :second_precision_enabled |
|
14 |
+ |
|
15 |
+ description <<-MD % { seconds: (<<-MD_SECONDS if second_precision_enabled) } |
|
12 | 16 |
This agent periodically triggers a run of each target Agent according to a user-defined schedule. |
13 | 17 |
|
14 | 18 |
# Targets |
@@ -34,11 +38,7 @@ module Agents |
||
34 | 38 |
|
35 | 39 |
* `0 22 * * 1-5 Etc/GMT+2`: every day of the week when it's 22:00 in GMT+2 |
36 | 40 |
|
37 |
- ## Seconds |
|
38 |
- |
|
39 |
- You can optionally specify seconds before the minute field. |
|
40 |
- |
|
41 |
- * `*/30 * * * * *`: every 30 seconds |
|
41 |
+ %{seconds} |
|
42 | 42 |
|
43 | 43 |
## Last day of month |
44 | 44 |
|
@@ -61,6 +61,14 @@ module Agents |
||
61 | 61 |
* `0 22 * * Sun#L1`: every last Sunday of the month, at 22:00 |
62 | 62 |
MD |
63 | 63 |
|
64 |
+ ## Seconds |
|
65 |
+ |
|
66 |
+ You can optionally specify seconds before the minute field. |
|
67 |
+ |
|
68 |
+ * `*/30 * * * * *`: every 30 seconds |
|
69 |
+ |
|
70 |
+ MD_SECONDS |
|
71 |
+ |
|
64 | 72 |
def default_options |
65 | 73 |
super.update({ |
66 | 74 |
'schedule' => '0 * * * *', |
@@ -78,7 +86,10 @@ module Agents |
||
78 | 86 |
def validate_options |
79 | 87 |
if (spec = options['schedule']).present? |
80 | 88 |
begin |
81 |
- Rufus::Scheduler::CronLine.new(spec) |
|
89 |
+ cron = Rufus::Scheduler::CronLine.new(spec) |
|
90 |
+ if !second_precision_enabled && cron.seconds != [0] |
|
91 |
+ errors.add(:base, "second precision schedule is not allowed in this service") |
|
92 |
+ end |
|
82 | 93 |
rescue ArgumentError |
83 | 94 |
errors.add(:base, "invalid schedule") |
84 | 95 |
end |
@@ -26,14 +26,22 @@ describe Agents::SchedulerAgent do |
||
26 | 26 |
@agent.options['schedule'] = '*/15 * * * * * *' |
27 | 27 |
@agent.should_not be_valid |
28 | 28 |
|
29 |
- @agent.options['schedule'] = '*/15 * * * * *' |
|
30 |
- @agent.should be_valid |
|
31 |
- |
|
32 | 29 |
@agent.options['schedule'] = '*/1 * * * *' |
33 | 30 |
@agent.should be_valid |
34 | 31 |
|
35 | 32 |
@agent.options['schedule'] = '*/1 * * *' |
36 | 33 |
@agent.should_not be_valid |
34 |
+ |
|
35 |
+ stub(@agent).second_precision_enabled { true } |
|
36 |
+ @agent.options['schedule'] = '*/15 * * * * *' |
|
37 |
+ @agent.should be_valid |
|
38 |
+ |
|
39 |
+ stub(@agent).second_precision_enabled { false } |
|
40 |
+ @agent.options['schedule'] = '*/15 * * * * *' |
|
41 |
+ @agent.should_not be_valid |
|
42 |
+ |
|
43 |
+ @agent.options['schedule'] = '0 * * * * *' |
|
44 |
+ @agent.should be_valid |
|
37 | 45 |
end |
38 | 46 |
end |
39 | 47 |
|